CC = gcc
OPT = -O2 -fomit-frame-pointer
LIBS = -lpthread
TARGET = l33t_proxy
MISC = Makefile
INCDIR = src/include
SRCDIR = src
BINDIR = ../bin/proxy
COMMONDIR = ../common
MAKE = make

all: $(TARGET)

$(TARGET): $(BINDIR)/parser.o $(BINDIR)/proxy_settings.o $(BINDIR)/http.o $(BINDIR)/thread_pool.o $(BINDIR)/networking.o $(BINDIR)/threads.o $(BINDIR)/shared_memory.o $(BINDIR)/main.o 
	$(CC) $(OPT) $(LIBS) -o $(BINDIR)/$(TARGET) $(BINDIR)/*.o 

$(BINDIR)/parser.o: $(COMMONDIR)/config_parser/parser.h $(COMMONDIR)/config_parser/parser.c 
	-mkdir -p $(BINDIR) > /dev/null
	$(CC) $(OPT) -c -o $(BINDIR)/parser.o $(COMMONDIR)/config_parser/parser.c 

$(BINDIR)/proxy_settings.o: $(SRCDIR)/proxy_settings.c $(INCDIR)/proxy_settings.h
	$(CC) $(OPT) -c -o $(BINDIR)/proxy_settings.o $(SRCDIR)/proxy_settings.c

$(BINDIR)/http.o: $(COMMONDIR)/http/http.h $(COMMONDIR)/http/http.c
	$(CC) $(OPT) -c -o $(BINDIR)/http.o $(COMMONDIR)/http/http.c

$(BINDIR)/thread_pool.o: $(COMMONDIR)/thread_pool/thread_pool.h $(COMMONDIR)/thread_pool/thread_pool.c
	$(CC) $(OPT) -c -o $(BINDIR)/thread_pool.o $(COMMONDIR)/thread_pool/thread_pool.c

$(BINDIR)/networking.o: $(COMMONDIR)/networking/networking.h $(COMMONDIR)/networking/networking.c
	$(CC) $(OPT) -c -o $(BINDIR)/networking.o $(COMMONDIR)/networking/networking.c

$(BINDIR)/threads.o: $(SRCDIR)/threads.c $(INCDIR)/threads.h
	$(CC) $(OPT) -c -o $(BINDIR)/threads.o $(SRCDIR)/threads.c

$(BINDIR)/shared_memory.o: $(COMMONDIR)/shared_memory/shared_memory.c $(COMMONDIR)/shared_memory/shared_memory.h
	$(CC) $(OPT) -c -o $(BINDIR)/shared_memory.o $(COMMONDIR)/shared_memory/shared_memory.c

$(BINDIR)/main.o: $(SRCDIR)/main.c 
	$(CC) $(OPT) -c -o $(BINDIR)/main.o $(SRCDIR)/main.c

clean:
	rm -f $(BINDIR)/*.o $(BINDIR)/$(TARGET)
